home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 10
/
The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso
/
PC_SIGCD
/
09
/
1
/
DISK0914.ZIP
/
SHOW_PIC.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1987-04-15
|
4KB
|
154 lines
PROGRAM Show_Pic (Input, Output);
{ THIS PROGRAM READS A PC-DEMO .PIC FILE AND DISPLAYS IT }
{ BY DIRECTLY ADDRESSING THE SCREEN MEMORY }
CONST
Columns40 = 40; { COLUMNS FROM 1 TO 40 }
Columns80 = 80; { COLUMNS FROM 1 TO 80 }
LastLine = 25; { LINES FROM 1 TO 25 }
MaxtString = 76; { MAX CHARS IN FILE NAME W/ PATH AND EXT }
FourKB = 4000; { FILE SIZE OF 80-COLUMN PICTURE }
TwoKB = 2000; { FILE SIZE OF 40-COLUMN PICTURE }
PictureExt = '.PIC'; { FILE EXTENSION FOR FULL PICTURES }
Null = ''; { NULL STRING }
TYPE
N_PictureType = ARRAY [1..LastLine, 1..Columns40] OF Integer;
{ ARRAY OF 40-COLUMN PICTURE DATA }
W_PictureType = ARRAY [1..LastLine, 1..Columns80] OF Integer;
{ ARRAY OF 80-COLUMN PICTURE DATA }
ParString = String [255];
{ VARIABLE LENGTH STRING PARAMETER TYPE }
Result = { REGISTERS AND FLAGS }
RECORD
AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags : integer;
END; {RECORD}
VAR
I : Byte;
Size : Integer;
IName,
OName : ParString;
W_Picture : W_PictureType;
{ THE 80-COLUMN PICTURE }
N_Picture : N_PictureType Absolute W_Picture;
{ THE 40-COLUMN PICTURE }
N_InFile : FILE OF N_PictureType;
W_InFile : FILE OF W_PictureType;
TestFile : FILE OF Byte;
N_InPtr : ^ N_PictureType;
W_InPtr : ^ W_PictureType;
Res : Result;
FUNCTION Exist (FileName : ParString) : Boolean;
{ SEES IF A FILE EXISTS }
VAR
TestFile : FILE;
BEGIN { Exist }
Assign (TestFile, FileName);
{$I-}
Reset (TestFile);
{$I+}
Exist := (IOResult = 0);
Close (TestFile);
END; { Exist }
PROCEDURE ConvertCase (VAR Strng : ParString);
{ CONVERTS STRINGS TO UPPER CASE }
VAR
I : Byte;
BEGIN { ConvertCase }
FOR I := 1 TO Length (Strng) DO
Strng [I] := UpCase (Strng [I]);
END; { ConvertCase }
BEGIN { Show_Pic }
Intr ($11, Res); { EQUIPMENT CHECK }
IF Res.AX AND $30 = $30
THEN { MONOCHROME }
BEGIN
N_InPtr := Ptr ($B000, 0);
W_InPtr := Ptr ($B000, 0);
END
ELSE { COLOR }
BEGIN
N_InPtr := Ptr ($B800, 0);
W_InPtr := Ptr ($B800, 0);
END;
IName := Null;
IF ParamCount = 0
THEN
BEGIN
Writeln ('Command must be of form: SHOW_PIC <name>');
Exit;
END;
IName := ParamStr (1);
Convertcase (IName);
IName := IName + PictureExt;
IF NOT Exist (IName)
THEN
BEGIN
Writeln ('ERROR! File not found ' + IName);
Exit;
END;
Assign (TestFile, IName);
Reset (TestFile);
Size := FileSize (TestFile);
Close (TestFile);
IF NOT ((Size = TwoKB) OR (Size = FourKB))
THEN
BEGIN
Writeln ('ERROR! File wrong size.');
Exit;
END;
Writeln ('Press any key to terminate...');
Delay (2000);
IF Size = TwoKB
THEN
BEGIN
Assign (N_InFile, IName);
Reset (N_InFile);
Read (N_InFile, N_Picture);
Close (N_InFile);
TextMode (1); { SET TO 40 COLUMNS }
N_InPtr ^ := N_Picture; { TRANSFER PICTURE DATA }
END
ELSE
BEGIN
Assign (W_InFile, IName);
Reset (W_InFile);
Read (W_InFile, W_Picture);
Close (W_InFile);
Port [$3D8] := $25; { VIDEO OFF - USE IF VIDEO "SNOWS" }
W_InPtr ^ := W_Picture; { TRANSFER PICTURE DATA }
Port [$3D8] := $2D; { VIDEO ON - USE IF VIDEO "SNOWS" }
END;
REPEAT
UNTIL KeyPressed;
TextMode (3); {RESET VIDEO }
END. { Show_Pic }